"""
装饰器：
    1. 定义：装饰器是一种特殊的函数，它可以接受一个函数作为参数，并返回一个新的函数。
    2. 作用：装饰器可以在不修改原函数代码的情况下，添加额外的功能或逻辑。
    3. 语法：使用@符号将装饰器应用到函数上。
    4. 分类：
        1. 内置装饰器：如 @staticmethod、@classmethod、@property 等。
        2. 自定义装饰器：根据需求自定义的装饰器。
    5. 应用场景：
        1. 日志记录：记录函数的调用信息，如参数、返回值等。
        2. 性能监控：记录函数的执行时间，用于性能分析。
        3. 身份验证：检查用户的权限，确保只有授权用户可以访问函数。
        4. 缓存：将函数的返回值缓存起来，避免重复计算。
        5. 输入验证：对函数的输入参数进行验证，确保输入符合要求。
        6. 异常处理：捕获函数执行过程中的异常，并进行处理。
        7. 函数增强：在不修改原函数代码的情况下，添加额外的功能或逻辑。
"""
import random
import time


# l1 = [random.randint(0, 10000) for i in range(10000)]
# l2 = l1.copy()
#
#
# # print(l1 == l2, id(l1) == id(l2))
#
#
# def time_cost(f):
# 	def calc():
# 		start = time.time()
# 		f()
# 		print(f"函数{f.__name__} 开销{time.time() - start}")
#
# 	return calc
#
#
# @time_cost
# def sort1():
# 	l1.sort()
# 	print(l1)
#
#
# # start = time.time()
# # sort1()
# # print(time.time()-start)
#
# @time_cost
# def sort2():
# 	temp = sorted(l2)
# 	print(temp)
#
#
# # start = time.time()
# # sort2()
# # print(time.time()-start)
#
#
#
#
# # 本质就是闭包  把原函数加工  加工以后的函数名还使用原始函数名
# # sort1 = time_cost(sort1)
# # sort1()
# #
# # sort2 = time_cost(sort2)
# # sort2()
#
#
#
# sort1()
#
# sort2()


# from django.contrib.auth.decorators import login_required


def log_record(f):
	def record(*args):
		r = f(*args)
		print(f"函数:{f.__name__} 参数:{args} 执行结果:{r}")
		return r

	return record


@log_record
def do_task(*args):
	temp = 0
	for arg in args:
		temp += arg
	return temp

@log_record
def get_max(*args):
	return max(args)

# print(do_task(1, 2, 3))


# do_task = log_record(do_task)
print(do_task(1, 2, 3))


print(get_max(1,2,3))

